package com;

import com.entity.ReadPDFEntity;
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;

/**
 * @author liujun
 * @date 2023年11月10日15:08
 */

public class ReadPDFUtil {
    private static final Logger logger = LoggerFactory.getLogger(ReadPDFUtil.class);
    private static final String PATH = "toHTML.html";

    public static void main(String[] args) throws FileNotFoundException {
        String path = "F:\\works\\back\\2023209509280_专利申请受理通知书_一种智能运输设备_2023042501052000_ZL075012_.pdf";
//        String str = readPDF(path);
//        System.out.print(str);
    }


    public static String writeFile(String html) {
        try {
            File outFile = new File(PATH);
            FileUtils.write(outFile, html);
            return outFile.getAbsolutePath();
        } catch (IOException e) {
            logger.error("写文件失败", e);
        }
        return null;
    }

    public static String writeFile(String html,String path) {
        try {
            File outFile = new File(path);
            FileUtils.write(outFile, html);
            return outFile.getAbsolutePath();
        } catch (IOException e) {
            logger.error("写文件失败", e);
        }
        return null;
    }

    public static  ReadPDFEntity  readPDF(String path) {
        try {
            //加载PDF文档
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromFile(path);

            //设置useEmbeddedSvg和 useEmbeddedImg布尔值为true
            pdf.getConvertOptions().setPdfToHtmlOptions(true, true);

            //保存到流
            File outFile = new File(PATH);
            OutputStream outputStream = new FileOutputStream(outFile);

            pdf.saveToStream(outputStream, FileFormat.HTML);
            String str = FileUtils.readFileToString(outFile,"UTF-8");

            return new ReadPDFEntity(outFile.getAbsolutePath(),str);
        } catch (Exception e) {
            logger.error("读取[{}]文件失败", path, e);
        }

        return null;
    }

//    public static String readPDF(String path) {
//        try {
//            //加载PDF文档
//            PdfDocument pdf = new PdfDocument();
//            pdf.loadFromFile(path);
//
//            //设置useEmbeddedSvg和 useEmbeddedImg布尔值为true
//            pdf.getConvertOptions().setPdfToHtmlOptions(true,true);
//
//            //保存到流
//            File outFile = new File(PATH);
//            OutputStream outputStream = new FileOutputStream(outFile);
//
//            pdf.saveToStream(outputStream, FileFormat.HTML);
//
//            String str = FileUtils.readFileToString(outFile,"UTF-8");
//            // outFile.delete();
//
//            return str;
//        } catch (Exception e) {
//            logger.error("读取[{}]文件失败",path,e);
//        }
//
//        return null;
//    }

//    public static void readPDF(String path) {
//                        File file = new File(path);
//        RandomAccessRead randomAccessFile = null;
//        PDFParser pdfParser = null;
//        PDDocument doc = null;
//
//
//        try {
//            PDFDomTreeConfig config = PDFDomTreeConfig.createDefaultConfig();
//            config.setImageHandler(PDFDomTreeConfig.saveToDirectory(new File(path)));
//            config.setFontHandler(config.getImageHandler());
//
//            PDDocument pdf = PDDocument.load(new File(path));
//            PDFDomTree parser = new PDFDomTree(config);
//            int pageCount = parser.getEndPage();
//
//            parser.setStartPage(1);
//            parser.setEndPage(1);
//            Writer output = new StringWriter();
//            parser.writeText(pdf, output);
//
//            String htmlOutput = output.toString();
//            output.flush();
//
//            System.out.println(htmlOutput);
//
//        } catch (IOException e) {
//            logger.error("读取pdf异常", e);
//            e.printStackTrace();
//        } catch (ParserConfigurationException e) {
//            logger.error("读取pdf异常", e);
//            e.printStackTrace();
//        } finally {
//            if (Objects.nonNull(doc)) {
//                try {
//                    doc.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                    logger.error("读取pdf 关闭流异常", e);
//                }
//                doc = null;
//            }
//
//            if (Objects.nonNull(randomAccessFile)) {
//                try {
//                    randomAccessFile.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                    logger.error("读取pdf 关闭流异常", e);
//                }
//                randomAccessFile = null;
//            }
//        }
//    }


//    public static String readPDF(String path) {
//                File file = new File(path);
//        RandomAccessRead randomAccessFile = null;
//        PDFParser pdfParser = null;
//        PDDocument doc = null;
//        try {
//            randomAccessFile = new RandomAccessReadBufferedFile(file);
//            pdfParser = new PDFParser(randomAccessFile);
//            doc = pdfParser.parse();
//
//            int pageCount = doc.getNumberOfPages();
//            PDFTextStripper textStripper =new PDFTextStripper();
//            for (int i = 1; i <= pageCount; i++) {
//                textStripper.setStartPage(i);
//                textStripper.setEndPage(i);
//                textStripper.setSortByPosition(true);
//                String str = textStripper.getText(doc);
//                System.out.println(str);
//            }
//        } catch (IOException e) {
//            logger.error("读取pdf异常", e);
//            e.printStackTrace();
//        } finally {
//            if (Objects.nonNull(doc)) {
//                try {
//                    doc.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                    logger.error("读取pdf 关闭流异常", e);
//                }
//                doc = null;
//            }
//
//            if (Objects.nonNull(randomAccessFile)) {
//                try {
//                    randomAccessFile.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                    logger.error("读取pdf 关闭流异常", e);
//                }
//                randomAccessFile = null;
//            }
//        }
//        return null;
//    }


//    public static String readPDF(String path) {
//        StringBuilder html = new StringBuilder();
//
//        File file = new File(path);
//        RandomAccessRead randomAccessFile = null;
//        PDFParser pdfParser = null;
//        PDDocument doc = null;
//        try {
//            randomAccessFile = new RandomAccessReadBufferedFile(file);
//            pdfParser = new PDFParser(randomAccessFile);
//            doc = pdfParser.parse();
//
//            int pageCount = doc.getNumberOfPages();
//            for (int i = 0; i < pageCount; i++) {
//                PDPage pdPage = doc.getPage(i);
//                PDResources pdResources = pdPage.getResources();
//                Iterable<COSName> cosNameIterator = pdResources.getXObjectNames();
//                if (Objects.nonNull(cosNameIterator)) {
//                    Iterator<COSName> iterator = cosNameIterator.iterator();
//                    while (iterator.hasNext()) {
//                        COSName key = iterator.next();
//                        PDXObject pdxObject = pdResources.getXObject(key);
//                        if (pdResources.isImageXObject(key)) {
//                            PDImage ixt = (PDImage) pdxObject;
//
//                            List<String> images = new ArrayList<>();
//                            ixt.createInputStream(images);
//                            System.out.println(images);
//                        } else  if(pdxObject instanceof PDFormXObject){
//                           PDFTextStripper pdfTextStripper = new PDFTextStripper();
//                           pdfTextStripper.getText(doc);
//
//                        }
//                    }
//                }
//
//            }
//
//        } catch (FileNotFoundException e) {
//            logger.error("读取pdf异常", e);
//        } catch (IOException e) {
//            logger.error("读取pdf异常", e);
//        } finally {
//            if (Objects.nonNull(doc)) {
//                try {
//
//                    doc.close();
//                } catch (IOException e) {
//                    logger.error("读取pdf异常", e);
//                }
//                doc = null;
//            }
//
//            if (Objects.nonNull(randomAccessFile)) {
//                try {
//                    randomAccessFile.close();
//                } catch (IOException e) {
//                    logger.error("读取pdf异常", e);
//                }
//                randomAccessFile = null;
//            }
//        }
//
//        return null;
//
//    }

}
